/**
 * Copyright (c) 2010-2011 Pierre Labatut
 *
 * This file is part of Space-Chronicles project.
 *
 * Space-Chronicles is free software: you can redistribute it and/or modify it
 * under the terms of its license which may be found in the accompanying
 * LICENSE file or <http://code.google.com/p/space-chronicles/>.
 */

package space.model;

import jinngine.math.Matrix4;

/**
 *
 * @author Pierre Labatut
 */
public interface Camera {

    /**
     * Transformation made of the rotation and translation part
     * @return a not null ortogonal transformation matrix
     */
    Matrix4 viewpoint();

    /**
     * Specifies the field of view angle, in degrees, in the y direction.
     * The fovx can be computed from the viewport physical dimensions
     * 
     * fovx = fovy * viewport width in mm/ viewport height in mm
     *
     * where width and height are the physical dimensions of the displayed image. When the vieport dimensions is in pixel, the pixel aspect ratio interfere
     * PAR= Pixel Aspect Ratio = pixel width / pixel height.
     *
     * fovx = fovy * viewport width in pix / viewport height in pix * PAR
     *
     * @return a positive angle in degree
     */
    double fovy();

    /**
     * Specifies the distance from the viewer to the near clipping plane (always positive).
     * @return
     */
    double near();

    /**
     * Specifies the distance from the viewer to the far clipping plane (always positive).
     * @return
     */
    double far();


}
